package com.pachong.common;

import com.common.core.utils.ReType;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import java.io.Serializable;
import java.util.List;

/**
 * @author zhuxiaomeng
 * @date 2017/12/13.
 * @email 154040976@qq.com
 * 通用service层
 */
public interface BaseService<T,E extends Serializable>{
  /**
   * 根据id删除
   * @param id
   * @return
   */
  void deleteByPrimaryKey(E id);

  /**
   * 插入
   * @param record
   * @return
   */
  void save(T record);

  /**
   * 批量保存
   * @param lists
   */
  void saveBatching(List<T> lists);

  /**
   * 根据id查询
   * @param id
   * @return
   */
  T selectByPrimaryKey(E id);


  /**
   * 更新
   * @param record
   * @return
   */
  T saveAndFlush(T record);

  /**
   * 查询多条记录
   * @param record
   * @return
   */
  List<T> selectList(T record);

  /**
   * 对参数进行分页查询并返回一个统一的json对象
   * @param record 请求参数
   * @param page 当前页
   * @param limit 每页大小
   * @return
   */
  ReType<T> show(T record, int page, int limit);

  /**
   * 根据条件分页查询
   * @param record 查询实体对象
   * @param pageable 分页对象
   * @return
   */
  Page<T> selectListByRecordAndPage(T record, Pageable pageable);
}
